"use strict";
{
    // 布尔值
    let b = true;
    // 编译通过
    // let createByNewBoolean: boolean = new Boolean(1);
    let createByNewBoolean = new Boolean(1);
    console.log(createByNewBoolean);
    // 使用构造函数实例的对象不是布尔值。返回的是一个布尔对象。
    let createByBoolean = Boolean(1);
    console.log(createByBoolean);
    // 直接调用 Boolean 返回的是一个 boolean 类型。
    // 数值
    // 十进制
    let n = 6;
    console.log("n:", n);
    // 十六进制
    let n2 = 0xf00d;
    console.log("n2:", n2);
    // 二进制（ES6）会被编译为十进制数字。
    let n3 = 0b1010;
    console.log("n3:", n3);
    // 八进制（ES6）会被编译为十进制数字。
    let n4 = 0o744;
    console.log("n4:", n4);
    // 非数字的值
    let n5 = NaN;
    console.log("n5:", n5);
    // 无穷大
    let n6 = Infinity;
    console.log("n6:", n6);
    // 字符串
    let s = "Tom";
    // 模板字符串（ES6）
    let s2 = `Hello, my name is ${s}.
I'll be ${n + 1} years old next month`;
    console.log("自我介绍：", s2);
    // 空值
    // Void , JavaScript 中没有 void 的概念，在 TypeScript 中，可以用 void 表示没有返回值的函数
    function fn() {
        alert("My name is Tom");
    }
    // fn();
    // null
    let nu = null;
    console.log(nu);
    // undefined
    let un = undefined;
    console.log(un);
    // 类型推论（根据字面值类型推出）
    let x = "h";
    // Type 'number' is not assignable to type 'string'.
    // x = 1;
    // 当不能推理出确定类型时怎么处理
    // Any 任意值
    let a = "H";
    a = 123;
    // 在任意值上访问任何属性都是允许的
    a.a;
    //never 从不
    // 表明该函数没有返回, 永远都没有返回值
    function fn2() {
        // 1. 死循环
        // while(true){
        //   console.log('run run run');
        // }
        //2. 抛出错误
        throw new Error("出问题啦~~");
    }
    // fn2();
    // 对象类型
    let o = {};
    o = [];
    o = function () { };
    // 数组 相同类型
    let arr;
    arr = ["1", "2", "3", "4", "5"];
    // arr = [1, 2];
    arr.push("6");
    console.log(arr);
    let arr1 = (Array); // 泛型
    // 元组 不同类型
    let tuple;
    tuple = ["Tom", 25];
    console.log(tuple);
    // 枚举
    // enum Days {
    //   Sun,
    //   Mon,
    //   Tue,
    //   Wed,
    //   Thu,
    //   Fri,
    //   Sat,
    // }
    // 手动赋值 后续未手动赋值的项的递增步长仍为 1
    let Days;
    (function (Days) {
        Days[Days["Sun"] = 7] = "Sun";
        Days[Days["Mon"] = 1] = "Mon";
        Days[Days["Tue"] = 2] = "Tue";
        Days[Days["Wed"] = 3] = "Wed";
        Days[Days["Thu"] = 4] = "Thu";
        Days[Days["Fri"] = 5] = "Fri";
        Days[Days["Sat"] = 6] = "Sat";
    })(Days || (Days = {}));
    console.log("12");
}
